
/**
 * 扩展树表格级联勾选方法：
 * @param {Object} container
 * @param {Object} options
 * @return {TypeName} 
 */
$.extend($.fn.treegrid.methods,{
	/**
	 * 级联选择
     * @param {Object} target
     * @param {Object} param 
	 *		param包括两个参数:
     *			id:勾选的节点ID
     *			deepCascade:是否深度级联
     * @return {TypeName} 
	 */
	cascadeCheck : function(target,param){
		var opts = $.data(target[0], "treegrid").options;
		if(opts.singleSelect)
			return;
		var idField = opts.idField;//这里的idField其实就是API里方法的id参数
		var status = false;//用来标记当前节点的状态，true:勾选，false:未勾选
		var selectNodes = $(target).treegrid('getSelections');//获取当前选中项
		for(var i=0;i<selectNodes.length;i++){
			if(selectNodes[i][idField]==param.id)
				status = true;
		}
		//级联选择父节点
		selectParent(target,param.id,idField,status);
		selectChildren(target,param.id,idField,param.deepCascade,status);
	}
});



/**
 * 级联选择父节点
 * @param {Object} target
 * @param {Object} id 节点ID
 * @param {Object} status 节点状态，true:勾选，false:未勾选
 * @return {TypeName} 
 */
function selectParent(target,id,idField,status){
	var parent = target.treegrid('getParent',id);
	if(parent){
		var parentId = parent[idField];
		if(status)
			target.treegrid('select',parentId);
		else
			target.treegrid('unselect',id);
		selectParent(target,parentId,idField,status);
	}
}
/**
 * 级联选择子节点
 * @param {Object} target
 * @param {Object} id 节点ID
 * @param {Object} deepCascade 是否深度级联
 * @param {Object} status 节点状态，true:勾选，false:未勾选
 * @return {TypeName} 
 */
function selectChildren(target,id,idField,deepCascade,status){
	//深度级联时先展开节点
	if(status&&deepCascade)
		target.treegrid('expand',id);
	//根据ID获取下层孩子节点
	var children = target.treegrid('getChildren',id);
	for(var i=0;i<children.length;i++){
		var childId = children[i][idField];
		if(status)
			target.treegrid('select',childId);
		else
			target.treegrid('unselect',childId);
		selectChildren(target,childId,idField,deepCascade,status);//递归选择子节点
	}
}